﻿#ifndef MYTREEWIDGET_H
#define MYTREEWIDGET_H

#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QHeaderView>
#include "db_cfg_g_def.h"
#include "mytabledata.h"
#include "DbCfgFun.h"

class MyTreeWidget : public QTreeWidget
{
	Q_OBJECT
public:
	MyTreeWidget(QWidget *parent = 0);
	~MyTreeWidget();

	/*	函数：			InitTableTreeItem
	用途：			初始化表结构树Item
	输入：			
	返回：			*/
	int             InitTableTreeItem();
	//ccg 读ICD文件函数
	//void            readIcdFile(QString fileName);
	//ccg 读逻辑节点的属性
	//int			readLNodeTypeAttributes(QXmlStreamAttributes attributes,QString* Name,QString* desc,QString* lnClass);
	//int			readDOAttributes(QXmlStreamAttributes attributes,QString* Name,QString* desc,QString* DOType);

protected:
	/*	函数：			InitGlobCodeTableItem
	用途：			初始化全景模型Item
	输入：			
	返回：			 */
	int				InitGlobObjectTableItem(QTreeWidgetItem *pParentItem);
	/*	函数：			InitTableItem
	用途：			初始化表结构树Item
	输入：			
	返回：			*/
	int             InitCommTableItem(QTreeWidgetItem *pParentItem);

	/* 函数：			InitYDTypeItem
	用途：			初始化远动库使用分类Item
	输入：			
	返回：			*/
	int             InitYDTypeItem(int AppType, QTreeWidgetItem *pParentItem);

	/* 函数：			InitRecordItem
	用途：			初始化实际记录Item
	输入：			
	返回：			*/
	int             InitRecordItem(int AppType, int TableId, int ParentId, QTreeWidgetItem *pParentItem, int NewRecordId = 0);

	/* 函数：			UpdateTaskChildItem
	用途：			修改单个任务的子Item
	输入：			
	返回：			*/
	int				UpdateTaskChildItem(int TaskId, bool IsCollect, bool IsTransmit, QTreeWidgetItem *pFRoutItem);
	//int				Update61850ModelChildItem(int DeviceID, QTreeWidgetItem *pFRoutItem);

	/* 函数：			UpdateTransmitChildItem
	用途：			修改转发的子Item
	输入：			XINT ParentId, QTreeWidgetItem *pParenItem
	返回：			*/
	int				UpdateTransmitChildItem(int ParentId, QTreeWidgetItem *pParentItem);

	/* 函数：			UpdateDeviceChildItem
	用途：			修改设备的子Item
	输入：			XINT ParentId, QTreeWidgetItem *pParenItem
	返回：			*/
	int				UpdateDeviceChildItem(int ParentId, QTreeWidgetItem *pParentItem);
	
	/* 函数：			UpdateTotalShowChildItem
	用途：			建立总表显示的遥信项目的子Item
	输入：			XINT ParentId, QTreeWidgetItem *pParenItem
	返回：			*/
	int				UpdateTotalShowChildItem(int ParentId, QTreeWidgetItem *pParentItem);

	/* 函数：			UpdateEquipChildItem
	用途：			修改一次设备的子Item
	输入：			
	返回：			*/
//	int				UpdateEquipChildItem(QTreeWidgetItem *pParentItem);

	/* 函数：			UpdateSysChildItem
	用途：			修改系统配置的子Item
	输入：			
	返回：			*/
	int				UpdateSysChildItem(QTreeWidgetItem *pParentItem);


	/* 函数：			UpdateDeviceModelChildItem
	用途：			修改设备模板的子Item
	输入：			
	返回：			*/
	int				UpdateDeviceModelChildItem(int DevModelId, QTreeWidgetItem *pParentItem);

	/* 函数：			AddNewItem
	用途：			添加Item
	输入：			
	返回：			*/
	QTreeWidgetItem *AddNewItem(int AppType, int TableId, int ChildParentId, char *pRecord, QTreeWidgetItem *pParentItem, int MaxNameLen, int MaxByNameLen);

	/* 函数：			DeletechildItem
	用途：			删除所有子Item
	输入：			
	返回：			*/
	void             DeletechildItem(QTreeWidgetItem *pParentItem);

	/* 函数：			SetItem
	用途：			设置树Item
	输入：			QTreeWidgetItem *pTreeItem, XString ItemText, QVariant ItemData, int ItemFlag
	返回：			*/
	int             SetItem(QTreeWidgetItem *pTreeItem, QString ItemText, QVariant ItemData, int ItemFlag= Qt::ItemIsEnabled | Qt::ItemIsSelectable);

public:
	TreeItemData    CurData;            //当前层次的数据结构
	
protected slots:

	/*	函数：			UpDateTreeItem
	用途：			修改树当前Item的所有子Item
	输入：			QTreeWidgetItem *pParentTreeItem
	返回：			*/
	void			OnUpDateTreeItem(quint32 AppType, quint32 TableId, quint32 ParentId, quint32 RecordId,int RowProp);
	void			OnUpDateTreeItem_byItem(quint32 AppType, quint32 TableId, quint32 ParentId, quint32 RecordId,QTreeWidgetItem *pCurItem, int RowProp);
	void			OnUpTreeItem_byItem(QTreeWidgetItem *pCurItem);
	void			OnAddTreeDevModelItem(quint32 RecordId);
	//	void            AddItemMenu();
	void			OnClickItem(QTreeWidgetItem *pCurItem);
protected:
	//	void			itemDoubleClicked(QTreeWidgetItem *item, int column);
	void			mousePressEvent(QMouseEvent *event);  //61850Modle
signals:
	void			ShowTable_Signal(QTreeWidgetItem *pCurItem);
	void			PopMenu_Signal(QPoint curPoint);

private:
	// 	QTreeWidgetItem *m_pCommItem;

	// 	QTreeWidgetItem *m_pNSA300TItem;

	QTreeWidgetItem *m_LastSelectItem;    //当前Item项
	//QXmlStreamReader m_xmlRead;
	_rLogic_Node *logicnodeItem ;
};

#endif // MYTREEWIDGET_H
